我們尋找的並不應該是英雄,而是一個好的想法
Noam Chomsky
還記得碩一下的時候,Lab 的老師找了以前一個現在在擔任軟體工程師的同學來課堂上演講,還有職涯分享。這位工程師說:「自然語言處理在台灣還不算特別盛行,但我覺得有慢慢被重視的感覺。就像每年 台灣PyCon 都會有一位名字叫 PeterWolf 的人,都會在 PyCon 上分享自然語言處理的技術,我覺得他超級猛。」
心想,真巧,我在大學時就擔任了他第一屆的實習生呢。
其實上了語言所之後,對自然語言處理以及計算語言學才開始漸漸理出個頭緒,如今再回頭來看當時所學的這些,才發現,若要單純依靠先前所介紹的那些模型,又要求要在短時間內訓練並達到相同目的,實在是不簡單。我想,過去的鐵人賽中,也尚未有其他參賽者介紹過 PeterWolf 以及他的團隊所開發的這些產品以及工具,那這次就先由我來拋磚引玉一下吧。
不知道你記不記得,我在第八天的文章:【NLP】Day 8: 你拿定主意的話...葛萊芬多!BOW&TF-IDF 之中曾經提到,在過去的研究脈絡中,所謂的語言模型,指的是運用統計方法以及機率來估計語言使用的可能性嗎? 在那之後,計算語言學以及自然語言處理的應用,大多都是延續這個邏輯脈絡,發展出各式各樣不同的模型,如 RNN、N-Gram 等。
今天,我需要你把先前所學的那些模型,通通忘掉。
台灣的各位想必對語言學應該都很陌生,每次跟其他人說自己是讀語言學的時候,別人總會說:「哇!那你是讀哪種語言?」心裡總是百般的無奈,我想這句話對語言學人來說,一定都心有戚戚焉。其實語言學並不是在學習「語言」,而是學習「語言結構」的一門「科學方法」。語言學分成了許多不同的支派,研究聲音的語音學、音韻學,還有語用學、語意學,一直到我們今天會提到「一點點」的句法學,都是語言學的大家庭。
太複雜了嗎?簡單來說,語言學就是一門
觀察語言,並歸納出一系列規則的學問。
研究語句架構的句法學更是一門已經研究多年的學問,已經有相對較為龐大的研究基礎。我還記得,當時 Peter 對我們所有實習生說:
「明明語言學家已經分析並歸納出了語言系統的運作規則,那就來好好運用那些規則,不應該繼續以為只能用統計機率的角度來進行斷詞的計算。」
PeterWolf 會這麼說,原因是:
在過去,語言學界的巨擘 Noam Chomsky 提出了一個假設。在這個假設裡,所有的語言,在底層都擁有相同的文法結構。 Chomsky 的理論革新點在於,只要是符合語法規則的語句,都可以透過程式語言邏輯產生。而每一句話皆可以透過語言規則將其進行歸納,其表現方法就是透過句法樹的形式呈現,而 Chomsky 後來也發展出了一套句法範疇理論,也就是 X-bar theory,X-bar theory 是每一個語言學專業的學生都一定學過的句法學理論,一定也基於 X-bar theory 畫了不少句法樹。
也就是說:
以電腦科學的角度來看,語法規則看似是無窮無盡,但在語言學的觀點裡,語言學規則是列得完的!
而 Articut,就是基於 X-bar theory 所打造的斷詞系統。
Source: 基於X-bar theory 規則所畫出來的句法樹
在 2011 年,麻省理工學院所舉辦的研討會,就有人問了 Chomsky 這樣的一個問題:
如何看待機器學習、機率模型近年來被應用在自然語言處理 (NLP) 與認知科學領域的趨勢。畢竟機率的方法在喬姆斯基的年代並不是主流的研究方法。
Chomsky 回應道,確實現在有許多的自然語言處理相關研究,是透過統計模型來解決各式各樣的語言學問題,有些成功,有些失敗。成功的案例,大多是因為統計方法跟語言的基本理論的結合。但若不考慮語言的實際結構就應用統計方法,那所謂的成功就不是正常意義下的成功。Chomsky 用蜜蜂的行為研究做了個比喻,他說,這就像科學家只是對蜜蜂錄影,並記錄過去蜜蜂的行為資料,並透過這些資料來預測蜜蜂的行為。機器學習的方法可能可以預測的很好,但並不算真正科學意義上的成功,因為沒有真正了解語言底層的實際架構。 老人家一番話讓一堆人中槍XD
但... Articut 辦到了?
Articut 是基於語法規則所搭建的斷詞系統,跟先前我們介紹過的斷詞系統不一樣,Articut 可以離線運行,且不需要大數據訓練,因此修改模型速度也較迅速,即使是新詞,也可以得到正確的結果。但我想要特別提出以下幾點來講:
在所有斷詞系統中,Articut 最吸引我的就是有著非常非常高的解釋力(在最後一天的文章中,我會好好說明為什麼我認為解釋力非常重要)舉例來說:
張三愛女生
CKIP => 張三愛(Nb) 女生(Na)
且其語義辨識結果是 張三愛 (person) 女生 (woman)
Articut => 張三(ENTITY_person) 愛(ACTION_verb) 女生(ENTITY_noun)
CKIP (及其它基於資料模型的方案) 的運算是由左到右,遇到「張」這個中文姓氏時,就開始計算。因為中文人名「絕大部份是三個字符」,因此接下來就會在這「三個字符」的長度裡計算它是人名的可能性,的確「張三愛」有可能是個人名;接著後面的「女」+「生」+ ending 的分佈裡,也很容易在資料裡出現「女生」這樣的組合,因此結果就是「張三愛/女生」。
但 Articut 是基於「句法 (syntax)」的,而一個完整的句子一定要有動詞!動詞出現以前,這個句子的意義是模糊的。就像日文的動詞在最後面,是一種 SOV 語言,V 表示動詞。在句子的動詞出現以前,是無法確定對方究竟說的是什麼的。
所以,Articut 的運算步驟會是…「這五個字符,哪一個有動詞的時態標記啊?哇~都沒有,那麼因為中文是動詞置中的 SVO 語言,所以先假設最靠近中間的那幾個是動詞。於是「愛」就先被擺在上述那個英文的句法樹的 V 的位置 (剛好英文也是 SVO 語言,所以它的 V 也在句子的中間)。」
然後開始第二步的推測「如果 V=愛,那麼前面有一個 NP 嗎?有,剛好有一個中文姓氏+數字。這在結構和音韻上都是可行的中文單名人名。那後面有其它的標記表示它不是一個名詞嗎?(e.g., 「很」是副詞/形容詞標記,但這句並不是「張三愛很滿」),沒有!那就把後面的字符當名詞,組成一個句法樹看看它能爬到多高的節點位置。」於是就能產生出「張三_person/愛_verb/女生_noun」這樣同時處理完詞性與斷詞的結果了。
除了解釋力超級高之外,我覺得功能多合一的 Articut 也非常厲害。做一次斷詞,就可以得到不只斷詞結果,也可以得到 Part-of-speech tag,更可以進行命名實體辨識。由於是台灣本土的公司,所以也在原來的基礎上加入了許多台灣的資料,例如觀光景點。除此之外,也加入了化學命名的實體辨識。越寫越覺得好像在業配呀 如果想知道更多,可以按這個連結!
我覺得這是自然語言處理的另外一種可能性。用機率統計的方式計算語言固然是一種觀點,也是解決問題的方法,但或許也可以考慮看看用這個觀點去看待自然語言處理,或許可以有更多不一樣的想法。
好,今天先講到這,明天再來介紹基於 Articut 的自然語言理解引擎 Loki。